package edu.del.newsreleasesystem.config;

import org.springframework.amqp.core.*;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    // 主题交换机（Topic Exchange）
    public static final String TOPIC_EXCHANGE = "news_topic_exchange";

    // 同步新闻的队列
    public static final String SYNC_QUEUE = "sync_queue";

    // 同步新闻的路由键
    public static final String SYNC_ROUTING_KEY = "sync_routing_key";

    /**
     * 声明一个 Topic 类型的 Exchange（主题交换机）
     * @return TopicExchange
     */
    @Bean
    public TopicExchange topicExchange() {
        return new TopicExchange(TOPIC_EXCHANGE);
    }

    /**
     * 声明一个 Queue（消息队列），用于接收同步新闻的消息
     * @return Queue
     */
    @Bean
    public Queue syncQueue() {
        // true 表示队列持久化
        return new Queue(SYNC_QUEUE, true);
    }

    /**
     * 将 Queue 绑定到 Exchange，并指定 Routing Key
     * @param syncQueue 消息队列
     * @param topicExchange 主题交换机
     * @return Binding
     */
    @Bean
    public Binding bindingSyncQueue(Queue syncQueue, TopicExchange topicExchange) {
        return BindingBuilder.bind(syncQueue)
                .to(topicExchange)
                // 指定路由键
                .with(SYNC_ROUTING_KEY);
    }

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}
